Make _get_iter invalidate iterators when FALSE is returned
authorKristian Rietveld <kris@gtk.org>
Mon, 9 May 2011 07:51:50 +0000 (09:51 +0200)
committerKristian Rietveld <kris@gtk.org>
Mon, 22 Aug 2011 19:30:29 +0000 (21:30 +0200)
gtk/gtkliststore.c
gtk/gtktreemodel.c
gtk/gtktreemodelfilter.c
gtk/gtktreemodelsort.c
gtk/gtktreestore.c

index b6533e4d80d9838e5819f372318b8323340e37f5..5ed838fb45b1d21460322e814e8a007bd4280f16 100644 (file)
@@ -647,7 +647,10 @@ gtk_list_store_get_iter (GtkTreeModel *tree_model,
   i = gtk_tree_path_get_indices (path)[0];
 
   if (i >= g_sequence_get_length (seq))
-    return FALSE;
+    {
+      iter->stamp = 0;
+      return FALSE;
+    }
 
   iter->stamp = priv->stamp;
   iter->user_data = g_sequence_get_iter_at_pos (seq, i);
index f0043005fe28af98f5b928010f54bcc6bc2d5efb..26f6d73f86ff987a1b60da5e88f37d8c0c4ea2d3 100644 (file)
@@ -1186,7 +1186,8 @@ gtk_tree_model_get_column_type (GtkTreeModel *tree_model,
  * @iter: (out): the uninitialized #GtkTreeIter
  * @path: the #GtkTreePath
  *
- * Sets @iter to a valid iterator pointing to @path.
+ * Sets @iter to a valid iterator pointing to @path.  If @path does
+ * not exist, * @iter is set to an invalid iterator and %FALSE is returned.
  *
  * Return value: %TRUE, if @iter was set
  */
index c76514ecd5fd31d3c8d9f1fe9e02ecf0541748ea..3f5e21f2e158bd8d108f76f30868de2c59c15f4e 100644 (file)
@@ -2318,6 +2318,7 @@ gtk_tree_model_filter_get_iter_full (GtkTreeModel *model,
     {
       if (!level || indices[i] >= level->array->len)
         {
+          iter->stamp = 0;
           return FALSE;
         }
 
@@ -2375,6 +2376,7 @@ gtk_tree_model_filter_get_iter (GtkTreeModel *model,
     {
       if (!level || indices[i] >= level->visible_nodes)
         {
+          iter->stamp = 0;
           return FALSE;
         }
 
index 9daa32fb488b8f1a7d21323e14a81d16a875cf39..c5186125c00c68a8fccf6c11f4355554b7d7c3cd 100644 (file)
@@ -1092,13 +1092,19 @@ gtk_tree_model_sort_get_iter (GtkTreeModel *tree_model,
 
   depth = gtk_tree_path_get_depth (path);
   if (depth == 0)
-    return FALSE;
+    {
+      iter->stamp = 0;
+      return FALSE;
+    }
 
   for (i = 0; i < depth - 1; i++)
     {
       if ((level == NULL) ||
          (indices[i] >= level->array->len))
-       return FALSE;
+        {
+          iter->stamp = 0;
+          return FALSE;
+        }
 
       if (g_array_index (level->array, SortElt, indices[i]).children == NULL)
        gtk_tree_model_sort_build_level (tree_model_sort, level, indices[i]);
index e2e969ed5f8451401fde53fbdd6cd873ee07d3c0..e0d40dd40f64ccd0e6e3dfbc944b274b945718a0 100644 (file)
@@ -560,13 +560,19 @@ gtk_tree_store_get_iter (GtkTreeModel *tree_model,
   parent.user_data = priv->root;
 
   if (!gtk_tree_store_iter_nth_child (tree_model, iter, &parent, indices[0]))
-    return FALSE;
+    {
+      iter->stamp = 0;
+      return FALSE;
+    }
 
   for (i = 1; i < depth; i++)
     {
       parent = *iter;
       if (!gtk_tree_store_iter_nth_child (tree_model, iter, &parent, indices[i]))
-       return FALSE;
+        {
+          iter->stamp = 0;
+          return FALSE;
+        }
     }
 
   return TRUE;